Έτσι είναι τα πράγματα. Μόνο με authentication/authorization/encryption θα καταφέρεις να εξασφαλίσεις το service σου.
Απλά, σαν επιπλέον ασφάλεια, στο WCF μπορείς να απενεργοποιήσεις την διάθεση metadata από το service σου. Ουσιαστικά το WSDL description δεν θα δημοσιεύεται, με αποτέλεσμα να κάνεις τη ζωή αυτού που θέλει να το καλέσει λίγο πιο δύσκολη. Από μόνο του όμως αυτό δεν είναι αρκετό. Γίνεται με το serviceMetadata behavior, ως εξής:
<behaviors>
<serviceBehaviors>
<behavior name="MyServiceBehaviors">
<serviceMetadata httpGetEnabled="false" />
</behavior>
</serviceBehaviors>
</behaviors>
Δυστηχώς δεν γνωρίζω πως ή αν γίνεται σε ASP.NET Web Service.
Edited: Για την ακρίβεια, αυτή είναι και η default συμπεριφορά στο WCF. Δηλαδή αν δεν βάλεις καθόλου το παραπάνω configuration, δεν θα έχεις WSDL description διαθέσιμο. Αν θέλεις να το ενεργοποιήσεις, γράφεις το παραπάνω με httpGetEnabled="true".
Οι απαντήσεις παρέχονται για συγκεκριμένες ερωτήσεις και χωρίς καμιά εγγύηση. Διαβάστε επίσης τους όρους χρήσης.